package com.cbw.utils;

import com.cbw.bean.Express;

import java.io.*;
import java.util.ArrayList;

/**
 * 数据持久化工具类
 * 1.读取文件-->将数据转成集合
 * 2.将集合-->写入文件
 * 传递的是对象，使用序列化流最方便，对象的序列化操作。
 */
public class IOUtil {
    private static File file=new File("快递信息.txt");//相对路径
    /**
     * 将数据(集合)写入文件
     * 使用序列化流，写到文件的是对象的二进制数据，在文本中是乱码
     * @param list
     */
    public static void writeToFile(ArrayList<Express>list) {
        //将文件流转成序列化流,使用JDK9的异常处理，自动释放资源
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file))){
            oos.writeObject(list);//将整个集合序列化到文件中
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * 从文件读取数据，使用反序列化流，将二进制读成集合对象
     * 要预防文件不存在时的异常,保证可以拿到一个集合(即使是空的)
     * @return
     */
    public static ArrayList<Express> readFromFile(){
        if (!file.exists()||file.length()==0) return new ArrayList<>();
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))){
            return (ArrayList<Express>) ois.readObject();//读成一个集合并返回
        } catch (IOException |ClassNotFoundException e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }
}
